package com.example.fw;

import java.util.Properties;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;


public class ApplicationManager {
	
	private WebDriver driver;
	public String baseUrl;
	private NavigationHelper navigationHelper;
	private GroupHelper groupHelper;
	private ContactHelper contactHelper;
	private PrintPhonesHelper printPhonesHelper;
	private Properties properties;
	private HibernateHelper hibernateHelper;
	private ApplicationModel model;

	public ApplicationManager(Properties i_properties){
		this.properties = i_properties;
		model = new ApplicationModel();
		model.setGroups(getHibernateHelper().listGroups());
		//model.setContacts(getHibernateHelper().listContact());
	}

	public void stop() {
		driver.quit();
	}
	
	public ApplicationModel getModel(){
		return model;
	}
	
	public NavigationHelper navigateTo(){
		if (navigationHelper == null){
			navigationHelper = new NavigationHelper(this);
		}
		return navigationHelper;
	}
	
	public GroupHelper getGroupHelper(){
		if (groupHelper == null) {
			groupHelper = new GroupHelper(this);
		}
		return groupHelper;
	}
	
	public ContactHelper getContactHelper(){
		if (contactHelper == null){
			contactHelper = new ContactHelper(this);			
		}
		return contactHelper;
	}
	
	public PrintPhonesHelper getPrintPhonesHelper(){
		if (printPhonesHelper == null){
			printPhonesHelper = new PrintPhonesHelper(this);
		}
		return printPhonesHelper;
	}
	
	public HibernateHelper getHibernateHelper(){
		if (hibernateHelper==null)
			hibernateHelper = new HibernateHelper(this);
		
		return hibernateHelper;
	}

	public WebDriver getWebDriver() {
		String browser = properties.getProperty("browser");

		if ( driver == null ){
			if (browser.equals("firefox")){
				driver = new FirefoxDriver();
			}
			else if (browser.equals("ie")){
				driver = new InternetExplorerDriver();
			}
			else {
				throw new Error("Unsupported browser: "+browser);
			}
		}
        baseUrl = properties.getProperty("baseURL");
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        driver.get(baseUrl);

        return driver;
	}
	
	public String getProperty(String key){
		return properties.getProperty(key);
	}
}
